package com.merit;

import java.util.Objects;
import java.util.Stack;

/**
 * @author xingdongyang
 * @date 2020/5/28
 */
public class TwoSum {
    public static void main(String[] args) {
        System.out.println(isValid(""));
    }
    /**
     * 两个数和
     * */
    public int[] twoSum(int[] nums, int target) {
        int[] targetArray = new int[2];
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    targetArray[0] = i;
                    targetArray[0] = j;
                }
            }
        }
        return targetArray;
    }

    /**
     * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
     * 比如123  结果321 溢出返回0
     */
    public static int reverse(int x) {
        if (x == 0) {
            return x;
        }
        StringBuilder str = new StringBuilder();
        str.append(Math.abs(x));
        str.reverse();
        try {
            return x > 0 ? Integer.parseInt(str.toString()) : (-Integer.parseInt(str.toString()));
        } catch (Exception e) {
            return 0;
        }

    }

    /**
     * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
     */
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        StringBuilder str = new StringBuilder().append(x);
        return str.reverse().toString().equals(String.valueOf(x));
    }

    /**
     * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。
     * 有效字符串需满足：
     * 左括号必须用相同类型的右括号闭合。
     * 左括号必须以正确的顺序闭合。
     */
    public static boolean isValid(String s) {
        if (Objects.isNull(s) || s.length() % 2 != 0) {
            return false;
        }
        if (s.length() == 0) {
            return true;
        }
        // 使用栈
        Stack<Character> stack = new Stack<>();
        int num = 0;
        for (int i = 0; i < s.length(); i++) {
            char theChar = s.charAt(i);
            if (theChar == '(' || theChar == '[' || theChar == '{') {
                stack.push(theChar);
                num++;
            } else {
                if (!stack.empty()) {
                    char popChar = stack.pop();
                    if (!(popChar == '(' && theChar == ')') &&
                            !(popChar == '[' && theChar == ']') &&
                            !(popChar == '{' && theChar == '}')) {
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty() && num > 0;
    }
}
